# encoding: utf-8
# 项目名称： 常用设计模式
# @File  : 001-抽象方法的集合.py
# @Author: sun hao
# @Desc :   支付
# @Date  :   19:35 2024/10/27

""""
    接口：抽象方法的集合
    作用：限制实现接口的类必须按照接口给定的调用方式实现这些方法;对高层模块隐藏了类的内部实现。
"""

from abc import ABCMeta, abstractmethod

# Payment 类使用 ABCMeta 作为原类，表示它是一个抽象基类。
# pay 方法被标记为抽象方法，这意味着任何继承 Payment 类的子类都必须实现这个方法。
# 如果下面的 Alipay 或者 WeChatPay 它们选择继承了 Payment 但是不去实现pay方法，就会报错
class Payment(metaclass=ABCMeta):

    @abstractmethod
    def pay(self, money):
        pass


class Alipay(Payment):
    def pay(self, money):
        print("支付宝")
        print(f"支付{money}元")


class WeChatPay(Payment):
    def pay(self, money):
        print("微信")
        print(f"支付{money}元")


p = WeChatPay()
p.pay(10000)
